package com.zpark.se.io.serialize;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * 对象序列化：
 * 1.序列化和反序列化
 *      序列化（Serialization）是将对象的状态信息转化为可以存储或者传输的形式的过程，一般将一个
 *  对象存储到一个储存媒介，例如档案或记忆体缓冲等，在网络传输过程中，可以是字节或者XML等格式；而字节
 *  或者XML格式的可以还原成完全相等的对象，这个相反的过程又称为反序列化；
 *
 * 2.Java对象的序列化和反序列化
 *      在Java中，我们可以通过多种方式来创建对象，并且只要对象没有被回收我们都可以复用此对象。但是，
 * 我们创建出来的这些对象都存在于JVM中的堆（heap）内存中，只有JVM处于运行状态的时候，这些对象才可
 * 能存在。一旦JVM停止，这些对象也就随之消失；
 *
 *      但是在真实的应用场景中，我们需要将这些对象持久化下来，并且在需要的时候将对象重新读取出来，
 * Java的序列化可以帮助我们实现该功能。
 *
 *      对象序列化机制（object serialization）是java语言内建的一种对象持久化方式，通过对象序
 * 列化，可以将对象的状态信息保存在字节数组，并且可以在有需要的时候将这个字节数组通过反序列化的方式
 * 转换成对象，对象的序列化可以很容易的在JVM中的活动对象和字节数组（流）之间进行转换。
 *
 * 序列化与反序列化使用的类：
 *      ObjectInputStream（反序列化）、ObjectOutputStream（序列化）
 */
public class Demo01 {
    public static void main(String[] args) throws Exception {
        // 创建Person对象
        Person dc = new Person();
        dc.setName("大锤");
        dc.setPwd("123456");

        // 将dc对象进行序列化
        // 创建序列化对象
        ObjectOutputStream oos = new ObjectOutputStream(
                new FileOutputStream(
                        new File("src/com/zpark/se/io/serialize/obj/dc.obj")
                )
        );

        // 调用写入数据方法
        oos.writeObject(dc);

        System.out.println("对象序列化完成");

        // 关闭流
        oos.close();
    }
}
